#include "includes.h" 

/*************************************************************/
/*                  初始化锁相环  -  80MHz                   */
/*************************************************************/
void PLL_Init(void) 
{
        CLKSEL=0x00;              //disengage PLL to system  
        PLLCTL_PLLON=1;           //turn on PLL  
        SYNR =0xc0 | 0x09;                          
        REFDV=0x80 | 0x01;   
        POSTDIV=0x00;             //pllclock=2*osc*(1+SYNR)/(1+REFDV)=160MHz;  
        _asm(nop);                //BUS CLOCK=80M  
        _asm(nop);  
        while(!(CRGFLG_LOCK==1)); //when pll is steady ,then use it;  
        CLKSEL_PLLSEL =1;         //engage PLL to system;   

}
/******************************************************************/
/*                        初始化PWM 控制电机与舵机                */
/******************************************************************/
void PWM_Init(void) 
{
  PWME      =    0x00;  //禁用PWM
  PWMCTL    =    0x70;  //通道0 1与2 3 4 5级练成16位PWM通道 
  PWMCLK    =    0x03;  //通道0 1用SA时钟4 5用A时钟作时钟源 2 3用B时钟作为时钟源
  PWMPOL    =    0xff;  //通道0 1 2 3 4 5的极性为高电平有效     
  PWMPRCLK  =    0x33;  //A时钟的分频系数为8 频率为10MHz，B时钟的分频系数为8 频率为10MHz  
  PWMSCLA   =    0x02;  //SA的时钟频率为  10M/(2*2)=2.5M
  //PWMSCLB   =    0x04;  //SB的时钟频率为  80M/(2*4)=10M
  PWMCAE    =    0x00;  //脉冲模式为左对齐模式
  PWMPER01  =    10000;  //通道01PWM的频率为250Hz
  PWMPER23  =    1000;   //通道2 3的pwm频率为10kHz
  PWMPER45 =     1000;     //4 5     10kHz
  PWMDTY01  =    4200;   //设置通道01的占空比 （中间值4200） 按CCD方向车体-往左，+往右   3300~5200
  PWMDTY23  =    0;      // 电机占空比 (0-1000)
  PWMDTY45  =    0; 
  PWME      =    0x3f;   //使能通道01,23 45
}
 
void PIT_Init(void)                 
{  
    PITCFLMT_PITE=0;//关闭PIT  
          
   //微定时器的装载寄存器  
    PITMTLD0= 80-1;//8位定时器初值设定。80分频，在80MHzBusClock下，为1MHz,即1us  
    PITMTLD1= 80-1;//8位定时器初值设定，80分频  
            
   //定时器的装载寄存器  
    PITLD0  = 5000 - 1 ;//16位定时器初值设定 5ms  
    PITLD1  = 9000 - 1 ;//定时5000*0.001ms = 9ms  
      
    PITCE_PCE0=1;//使能通道0  
    PITCE_PCE1=1;//使能通道1  
            
    PITMUX_PMUX0=0;//0：相应16位定时器与微时基0连接  
    PITMUX_PMUX1=1;//1：相应16位定时器与微时基1连接  
            
    PITINTE_PINTE0=1;//开通PIT0定时器的溢出中断      
    PITINTE_PINTE1=1;//开通PIT1定时器的溢出中断  
      
    PITCFLMT_PITE=1; //使能PIT   
}

void ADC_Init(void)      //   AD初始化
{ 
   ATD0DIEN =    0x00;   //禁止数字输入
   ATD0CTL4 =    0x09;   //AD模块时钟频率为4MHz 
   ATD0CTL3 =    0x88;  
   ATD0CTL0 =    0x00;  
   ATD0CTL1 =    0x40;   //选用12位模数转换
   ATD0CTL2 =    0x40;   //启动A/D转换,快速清零,禁止中断 
}
                      
void ECT_Init(void)        //定时器初始化
{
  TSCR1_TFFCA = 1;         // 定时器标志位快速清除
  TSCR1_TEN   = 1;         // 定时器使能位. 1=允许定时器正常工作; 0=使主定时器不起作用(包括计数器)
  TIOS        = 0x0f;      // IOC7必须设置为输入，否则无法捕捉
  TCTL1       = 0x00;         // 后四个通道设置为定时器与输出引脚断开
  TCTL2       = 0x00;      // 前四个通道设置为定时器与输出引脚断开
  TIE         = 0x00;      // 禁止所有通道定时中断
  TSCR2       = 0x03;	     // 预分频系数pr2-pr0:011,,时钟周期为10us, 80/8
  TFLG1       = 0xff;	     // 清除各IC/OC中断标志位
  TFLG2       = 0xff;      // 清除自由定时器中断标志位
}

 void PAI_Init(void)       //脉冲累加器
{ 
  //PACTL=0x40;     //端口初始化,始能脉冲累加器，累加下降沿
  PACTL_PAEN=0;     //禁止
  PACNT=0; 
  PACTL_PAMOD=0;
  PACTL_PEDGE=1;    //累加上升沿
  PACTL_PAEN=1;     //开启
}
 
/*************************************************************/
/*              初始化SCI0   串口蓝牙     s0:R  s1:T         */
/*************************************************************/
void SCI_Init(void) 
{
  SCI0BD = 43;          //设置SCI0波特率为115200   80MHz  80/(16*115200)
  SCI0CR1 = 0x00;        //设置SCI0为正常模式，八位数据位，无奇偶校验
  SCI0CR2 = 0x0c;        //允许发送数据，禁止发送中断功能 查询方式
}

void OLED_Init(void)
{
  DDRE=0xff;          //E0 E2 E4 
  DDRA_DDRA1=1;       //B7
  LCD_Init();
}

void Init_All(void)       //全部的初始化
{
  PLL_Init();
  PWM_Init();                                       
  PIT_Init();
  ADC_Init();
  //ECT_Init();
  PAI_Init();
  SCI_Init();
  
  OLED_Init();
  DFlash_Init();    //初始化Flash
  
  DDRA=0x5f;       //输出口： A1液晶  A3 LED灯  A4A2 CCD  输入口：A5普通备用口 A7红外
  
  DDRB=0x00;       //输入口：B1 按键1 B3 按键2  拨码开关1-4 B4 B2 B0 T6
  DDRT_DDRT6=0;    //拨码4
  
}

/****************延时子函数*****************/
void Delay_us(word n_us)
{
    word loop_i;
    for(loop_i=0;loop_i<n_us;loop_i++) 
    {;}
}

void Delay_ms(word n_ms)
{
    word loop_i;
    for(loop_i=0;loop_i<n_ms;loop_i++) 
    {
        Delay_us(6667);
    }
}

void Delay_s(word n_s)
{
    word loop_i;
    for(loop_i=0;loop_i<n_s;loop_i++) 
    {
        Delay_ms(1000);
    }      
}
